package ar.com.ctrln.persistence.model.contratacion;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Transient;

import org.apache.commons.lang.builder.HashCodeBuilder;

import ar.com.ctrln.persistence.model.servicios.Servicio;

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class DetalleContratacion {

	@Transient
	public static final SimpleDateFormat FORMAT_DAY = new SimpleDateFormat(
			"dd/MM/yyyy");
	@Id
	@GeneratedValue(strategy = GenerationType.TABLE)
	@Column(name = "id_detalle")
	private long id;

	@ManyToOne
	@JoinColumn(name = "id_contratacion")
	private ContratacionServicio contratacionServicio;

	@Column
	private Date fechaInicio;

	@Column
	private Date fechaModificacion;

	@Column
	private Date fechaFin;

	@OneToOne
	private Servicio servicio;

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public ContratacionServicio getContrato() {
		return contratacionServicio;
	}

	public void setContrato(ContratacionServicio contrato) {
		this.contratacionServicio = contrato;
	}

	public Date getFechaInicio() {
		return fechaInicio;
	}

	public void setFechaInicio(Date fechaInicio) {
		this.fechaInicio = fechaInicio;
	}

	public Date getFechaModificacion() {
		return fechaModificacion;
	}

	public void setFechaModificacion(Date fechaModificacion) {
		this.fechaModificacion = fechaModificacion;
	}

	public Date getFechaFin() {
		return fechaFin;
	}

	public void setFechaFin(Date fechaFin) {
		this.fechaFin = fechaFin;
	}

	public void setServicio(Servicio servicio) {
		this.servicio = servicio;
	}

	public Servicio getServicio() {
		return servicio;
	}

	public String getFechaInicioString() {
		return FORMAT_DAY.format(fechaInicio);
	}

	@Override
	public boolean equals(Object obj) {

		return (obj instanceof DetalleContratacion && getId() == ((DetalleContratacion) obj)
				.getId());
	}

	@Override
	public int hashCode() {
		return new HashCodeBuilder(17, 37).append(getFechaInicio())
				.append(getServicio().getNombre()).toHashCode();
	}

}
